Ставим пакет:
library(tidyverse); library(MASS)Загружаем данные, переименовываем переменные, убираем NA, там где они на самом деле не NA, создаем новую переменную endings, принимающей значение “a”, “u” или “both”:
by <- read_tsv("../data/final_by.csv")
by %>%
mutate(ending = ifelse(`-a` == "+" & `-u` == "+", "both", `-a`),
ending = ifelse(ending == "+", "a", ending),
ending = ifelse(ending == "-", "u", ending)) %>%
mutate(cons.cluster = ifelse(is.na(`last cons. cluster`), "V", `last cons. cluster`)) %>%
mutate(suffix = ifelse(is.na(suffix), "-", suffix)) %>%
mutate(all_vowels = `all vowels`) %>%
mutate(last_vowel = `last vowel`) ->
by
by <- by[, -c(2, 3, 5:7)]
str(by)Параметров много. Чтобы не смотреть на все сразу можно попробовать сделать MCA.
by[] <- lapply(by, factor) # convert all variables to factor
MCA <- mca(by[, -c(1, 4, 6)])
by_MCA <- cbind(by, MCA$rs)
write_tsv(by_MCA, "../data/by_MCA.tsv")by_MCA %>%
ggplot(aes(`1`, `2`, color = ending))+
geom_point(data = by_MCA[,-6], color = "grey", alpha = 0.2)+
geom_point(alpha = 0.25, show.legend = F)+
stat_ellipse(show.legend = F)+
facet_wrap(~ending)+
theme_bw()+
labs(title = "MCA для белорусского языка",
subtitle = "построено на основе всех параметров")Данный график представляет собой MCA, произведенный на основе всех параметров в белорусских данных. Данные разделены на три группы по типу окончанию. Серым фоном обозначены все данные вместе. Как видно, данные не делятся на кластеры, а скорее делятся на похожие группы, с одинаковым центром и немножко разными перифериями. Приэтом разброс точек относительно центра несколько отличается в группе, члены которой принимают оба типа окончания. На основании данной визуализации мы можем сделать вывод, о том, что выбранные параметры не очень-то и различают группы слов, принимающие разные окончания. Все что остается анализировать — отдельные тренды внутри каждого из параметров.
Перебрав разные модели, мы обнаружили, что основным параметром, отвечающим за расположение в новых осях является последний гласный:
by_MCA %>%
ggplot(aes(`1`, `2`, color = ending, label = last_vowel))+
geom_text(data = by_MCA[,-6], color = "grey", alpha = 0.2)+
geom_text(alpha = 0.25, show.legend = F)+
stat_ellipse(show.legend = F)+
facet_grid(~ending)+
theme_bw()+
labs(title = "MCA для белорусского языка",
subtitle = "построено на основе всех параметров, буква обозначает коненый гласный")Таким образом мы обнаруживаем некоторые тренды:
by_MCA %>%
count(last_vowel, ending) %>%
ggplot(aes(ending, last_vowel, size = 2*n))+
geom_point(aes(size = n), alpha=0.8, color="darkblue", show.legend =FALSE) +
geom_text(aes(label = n), color="white", size = 4) +
scale_size(range = c(4,16)) +
theme_bw() labs(x = "аудио стимулы",
y = "видео стимулы",
title = "Результаты сгрупированные по ответу и полу")## $x
## [1] "аудио стимулы"
##
## $y
## [1] "видео стимулы"
##
## $title
## [1] "Результаты сгрупированные по ответу и полу"
##
## attr(,"class")
## [1] "labels"
cs <- read_delim("../data/final_cs.csv", "\t", escape_double = FALSE, trim_ws = TRUE)
cs %>%
mutate(ending = ifelse(`-a` == "+" & `-u` == "+", "both", `-a`),
ending = ifelse(ending == "+", "a", ending),
ending = ifelse(ending == "-", "u", ending)) %>%
mutate(cons.cluster = ifelse(is.na(`last cons. cluster`), "V", `last cons. cluster`)) %>%
mutate(suffix = ifelse(is.na(suffix), "-", suffix)) %>%
mutate(all_vowels = `all vowels`) %>%
mutate(last_vowel = `last vowel`) ->
cs
cs <- cs[, -c(2, 3, 5:7)]
cs[] <- lapply(cs, factor) # convert all variables to factor
MCA <- mca(cs[, -c(1, 4, 6)])
cs_MCA <- cbind(cs, MCA$rs)
write_tsv(cs_MCA, "../data/cs_MCA.tsv")cs_MCA %>%
ggplot(aes(`1`, `2`, color = ending))+
geom_point(data = cs_MCA[,-6], color = "grey", alpha = 0.2)+
geom_point(alpha = 0.25, show.legend = F)+
stat_ellipse(show.legend = F)+
facet_wrap(~ending)+
theme_bw()+
labs(title = "MCA для чешского языка",
subtitle = "построено на основе всех параметров")Здесь видно, что и слов с окончанием -a и слов, допускающих оба окончания, достаточно мало и все они в центре. Так что какие-то тренды здесь выбранные параметры не выделяют.
sk <- read_delim("../data/final_sk.csv", "\t", escape_double = FALSE, trim_ws = TRUE)
sk %>%
mutate(ending = ifelse(`-a` == "+" & `-u` == "+", "both", `-a`),
ending = ifelse(ending == "+", "a", ending),
ending = ifelse(ending == "-", "u", ending)) %>%
mutate(cons.cluster = ifelse(is.na(`last cons. cluster`), "V", `last cons. cluster`)) %>%
mutate(suffix = ifelse(is.na(suffix), "-", suffix)) %>%
mutate(all_vowels = `all vowels`) %>%
mutate(last_vowel = `last vowel`) ->
sk
sk <- sk[, -c(2, 3, 5:7)]
sk[] <- lapply(sk, factor) # convert all variables to factor
MCA <- mca(sk[, -c(1, 4, 6)])
sk_MCA <- cbind(sk, MCA$rs)
write_tsv(sk_MCA, "../data/sk_MCA.tsv")sk_MCA %>%
ggplot(aes(`1`, `2`, color = ending))+
geom_point(data = sk_MCA[,-6], color = "grey", alpha = 0.2)+
geom_point(alpha = 0.25, show.legend = F)+
stat_ellipse(show.legend = F)+
facet_wrap(~ending)+
theme_bw()+
labs(title = "MCA для славацкого языка",
subtitle = "построено на основе всех параметров")Видно, что есть некоторые кластеры, в которых встречаются лишь слова с окончанием -a. Например, кластер, находящийся выше горизонтали 0.005 или на вертикали -0.005. Перебрав разные модели, мы обнаружили, что основным параметром, отвечающим за расположение в новых осях является тип суффикса (и связанный с ним тип конечный согласного):
sk_MCA %>%
filter(grepl("ec", suffix) |
grepl("ík", suffix) |
grepl("ček", suffix) ) %>%
ggplot(aes(`1`, `2`, color = suffix))+
geom_point(data = sk_MCA[,-6], color = "grey", alpha = 0.2)+
geom_point(alpha = 0.25, show.legend = F)+
stat_ellipse()+
facet_wrap(~ending)+
theme_bw()+
labs(title = "MCA для славацкого языка",
subtitle = "построено на основе всех параметров")## Warning in MASS::cov.trob(data[, vars]): Probable convergence failure
На данном графике показаны суффиксы, которые встречаются только с окончанием -a.
ru <- read_delim("../data/final_ru.csv", "\t", escape_double = FALSE, trim_ws = TRUE)
ru %>%
mutate(ending = ifelse(`-a` == "+" & `-u` == "+", "both", `-a`),
ending = ifelse(ending == "+", "a", ending),
ending = ifelse(ending == "-", "u", ending)) %>%
mutate(cons.cluster = ifelse(is.na(`last cons. cluster`), "V", `last cons. cluster`)) %>%
mutate(suffix = ifelse(is.na(suffix), "-", suffix)) %>%
mutate(all_vowels = `all vowels`) %>%
mutate(last_vowel = `last vowel`) ->
ru
ru <- ru[, -c(2, 3, 5:7)]
ru[] <- lapply(ru, factor) # convert all variables to factor
MCA <- mca(ru[, -c(1, 4, 6)])
ru_MCA <- cbind(ru, MCA$rs)
write_tsv(ru_MCA, "../data/ru_MCA.tsv")ru_MCA %>%
ggplot(aes(`1`, `2`, color = ending))+
geom_point(data = ru_MCA[,-6], color = "grey", alpha = 0.2)+
geom_point(alpha = 0.25, show.legend = F)+
stat_ellipse(show.legend = F)+
facet_wrap(~ending)+
theme_bw()+
labs(title = "MCA для русского языка",
subtitle = "построено на основе всех параметров")В русском языке рассмтриваемые параметры не кластеризуют данные. Все слова находятся в одном и том же ядре и отличаются лишь количеством.
ua <- read_delim("../data/final_ua.csv", "\t", escape_double = FALSE, trim_ws = TRUE)
ua %>%
mutate(ending = ifelse(`-a` == "+" & `-u` == "+", "both", `-a`),
ending = ifelse(ending == "+", "a", ending),
ending = ifelse(ending == "-", "u", ending)) %>%
mutate(cons.cluster = ifelse(is.na(`last cons. cluster`), "V", `last cons. cluster`)) %>%
mutate(suffix = ifelse(is.na(suffix), "-", suffix)) %>%
mutate(all_vowels = `all vowels`) %>%
mutate(last_vowel = `last vowel`) ->
ua
ua <- ua[, -c(2, 3, 5:7)]
ua[] <- lapply(ua, factor) # convert all variables to factor
MCA <- mca(ua[, -c(1, 4, 6)])
ua_MCA <- cbind(ua, MCA$rs)
write_tsv(ua_MCA, "../data/ua_MCA.tsv")ua_MCA %>%
ggplot(aes(`1`, `2`, color = ending))+
geom_point(data = ua_MCA[,-6], color = "grey", alpha = 0.2)+
geom_point(alpha = 0.25, show.legend = F)+
stat_ellipse(show.legend = F)+
facet_wrap(~ending)+
theme_bw()+
labs(title = "MCA для украинского языка",
subtitle = "построено на основе всех параметров")В целом украинские данные выглядят достаточно монолитно. Отличие видно лишь в кластере, который находиться правее вертикали 0.005. Перебрав разные модели, мы обнаружили, что основным параметром, отвечающим за это отделение является тип суффикса (и свазанный с ним параметр конечного кластера согласного). Если быть точнее, то все суффиксы заканчивающиеся на iзм/изм и т. п.
ua_MCA %>%
filter(grepl("зм", suffix)) %>%
ggplot(aes(`1`, `2`, color = suffix))+
geom_point(data = ua_MCA[,-6], color = "grey", alpha = 0.2)+
geom_point(alpha = 0.25, show.legend = F)+
stat_ellipse()+
facet_wrap(~ending)+
theme_bw()+
labs(title = "MCA для украинского языка",
subtitle = "построено на основе всех параметров")pl <- read_delim("../data/final_pl.csv", "\t", escape_double = FALSE, trim_ws = TRUE)
pl %>%
mutate(ending = ifelse(`-a` == "+" & `-u` == "+", "both", `-a`),
ending = ifelse(ending == "+", "a", ending),
ending = ifelse(ending == "-", "u", ending)) %>%
mutate(cons.cluster = ifelse(is.na(`last cons. cluster`), "V", `last cons. cluster`)) %>%
mutate(suffix = ifelse(is.na(suffix), "-", suffix)) %>%
mutate(all_vowels = `all vowels`) %>%
mutate(last_vowel = `last vowel`) ->
pl
pl <- pl[, -c(2, 3, 5:7)]
pl[] <- lapply(pl, factor) # convert all variables to factor
MCA <- mca(pl[, -c(1, 4, 6)])
pl_MCA <- cbind(pl, MCA$rs)
write_tsv(pl_MCA, "../data/pl_MCA.tsv")pl_MCA %>%
ggplot(aes(`1`, `2`, color = ending))+
geom_point(data = pl_MCA[,-6], color = "grey", alpha = 0.2)+
geom_point(alpha = 0.25, show.legend = F)+
stat_ellipse(show.legend = F)+
facet_wrap(~ending)+
theme_bw()+
labs(title = "MCA для польского языка",
subtitle = "построено на основе всех параметров")Польский материал показывает, что есть общий центральный кластер, а также есть кластеры, которые хорошо отличаются по окончанию: кластер -a выше горизонтали 0.002 и кластер -u левее вертикали -0.001. Перебрав разные модели, мы обнаружили, что основным параметром, отвечающим за это отделение является тип суффикса (и свазанный с ним параметр конечного кластера согласного). Однако наша классификация суффиксав была достаточно дробная. Если объединить (я это делал руками, Настя) все суффиксы в кластеры, то легко показать, что пространство польских слов делиться на центр, который не кластеризуется при помощи наших параметров, и переферию: в одном суффиксы типа i/yzm, которые требуют оконачания -u, в другом суффиксы типа -ec, которые требуют -a.
pl_MCA %>%
filter(hiper_suf == "i/yzm" |
hiper_suf == "ec") %>%
ggplot(aes(`1`, `2`, color = hiper_suf))+
geom_point(data = pl_MCA[,-7], color = "grey", alpha = 0.2)+
geom_point(alpha = 0.25)+
# stat_ellipse()+
facet_wrap(~ending)+
theme_bw()+
labs(title = "MCA для славацкого языка",
subtitle = "построено на основе всех параметров")Итого, наше исследование, показало:
by_MCA %>%
group_by(ending) %>%
summarise(n = n()/nrow(by_MCA),
lng = "белорусский") ->
by_overall
pl_MCA %>%
group_by(ending) %>%
summarise(n = n()/nrow(pl_MCA),
lng = "польский") ->
pl_overall
ru_MCA %>%
group_by(ending) %>%
summarise(n = n()/nrow(ru_MCA),
lng = "русский") ->
ru_overall
ua_MCA %>%
group_by(ending) %>%
summarise(n = n()/nrow(ua_MCA),
lng = "украинский") ->
ua_overall
cs_MCA %>%
group_by(ending) %>%
summarise(n = n()/nrow(cs_MCA),
lng = "чешский") ->
cs_overall
sk_MCA %>%
group_by(ending) %>%
summarise(n = n()/nrow(sk_MCA),
lng = "словацкий") ->
sk_overall
rbind(pl_overall, sk_overall, ru_overall, cs_overall, by_overall, ua_overall) %>%
ggplot(aes(ending, n, fill = ending))+
geom_bar(stat = "identity")+
facet_wrap(~lng)+
labs(title = "Процентная доля слов с окончниями -a/-u",
subtitle = "посчитано на основе каждого языка")+
theme_bw()